package com.xmfh.wemedia.controller;


import com.xmfh.wemedia.common.Result;
import com.xmfh.wemedia.exception.UserAlreadyExistsException;
import com.xmfh.wemedia.mapper.DdUserMapper;
import com.xmfh.wemedia.model.DdUser;
import com.xmfh.wemedia.service.IDdUserService;
import com.xmfh.wemedia.util.JsonResult;
import com.xmfh.wemedia.vo.PreRegisterVo;
import com.xmfh.wemedia.vo.UserVo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpSession;

/**
 * <p>
 * 用户表 前端控制器
 * </p>
 *
 * @author admin
 * @since 2022-04-03
 */
@Slf4j
@RestController
@RequestMapping("/wemedia/ddUser")
public class DdUserController {
    @Autowired
    DdUserMapper userMapper;

    @Autowired
    IDdUserService iDdUserService;

    /**
     * 用户注册
     *
     * @param preRegisterVo 浏览器传来的用户对象
     * @return 结果反馈，包括用户已存在和注册成功信息
     */
    @PostMapping("/register")
    public JsonResult<Void> register(@RequestBody PreRegisterVo preRegisterVo) {
        try {
            iDdUserService.insertNewUser(preRegisterVo);
        } catch (UserAlreadyExistsException e) {
            /*用户已存在的错误反馈*/
            return JsonResult.fail(JsonResult.State.USER_EXISTS, e.getMessage());
        } catch (RuntimeException e) {
            /*其他错误*/
            e.printStackTrace();
        }
        /*用户注册成功*/
        return JsonResult.ok();
    }

    /**
     * 登录
     * @param user 根据输入的用户查询数据库
     * @return 查询数据库的结果
     */
    @PostMapping ("/login")
    public Result login(@RequestBody UserVo user,HttpSession session){
        log.info("接收到登录请求...");
        log.info("参数为：" + user.toString());
        DdUser ddUser = userMapper.selectByUsername(user.getUsername());
        if ( ddUser != null){
            if(ddUser.getPassword().equals(user.getPassword())){
                session.setAttribute("ddUser",ddUser);
                return Result.ok("登录成功");//登录成功
            }
            return Result.error("密码错误");//密码错误
        }
        return Result.error("用户名不存在");//用户名不存在
    }

    /**
     * 我的个人信息
     * @return
     */
    @GetMapping("/me")
    public Result getMe() {
        return iDdUserService.getMe();
    }

    /**
     * 登出
     *
     * @return
     */
    @GetMapping("/logout")
    public Result logout() {
        iDdUserService.logout();
        return Result.ok();
    }

    /**
     * 根据网页缓存获取目前登陆用户的静态方法
     *
     * @param session 网页缓存
     * @return 目前登陆用户的包装类
     */
    public static DdUser getCurrentUser(HttpSession session) {
        return (DdUser) session.getAttribute("ddUser");
    }

    /**
     * 自动登陆admin的用户，配合fakeLogin.html使用
     *
     * @param session 网页缓存
     * @return 用户提示
     */
    @GetMapping("/skip")
    public JsonResult<Void> sessionTest(HttpSession session) {
        session.setAttribute("ddUser", null);
        session.setAttribute("ddUser", userMapper.selectByUsername("admin"));
        return JsonResult.ok();
    }

    @GetMapping("/getUserInfo")
    public JsonResult<DdUser> getCurrentUserData(HttpSession session) {
        DdUser ddUser = (DdUser) session.getAttribute("ddUser");
        return JsonResult.ok(ddUser);
    }
}
